package com.lengxf.pay.icbc.bean.qr;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.lengxf.pay.common.bean.PayOrder;
import com.lengxf.pay.icbc.config.ICBC_PayConfig;
import lombok.Data;

import java.time.LocalDateTime;

@Data
public class QrReq {

    //商户线下档案编号(特约商户12位，特约部门15位)
    @JsonProperty("mer_id")
    private String merId;

    //e生活档案编号
    @JsonProperty("store_code")
    private String storeCode;

    //商户系统订单号
    @JsonProperty("out_trade_no")
    private String outTradeNo;

    //订单总金额，单位：分
    @JsonProperty("order_amt")
    private String orderAmt;

    //商户订单生成日期，格式:yyyyMMdd
    @JsonProperty("trade_date")
    @JsonFormat(pattern = "yyyyMMdd")
    private LocalDateTime tradeDate;

    //商户订单生成时间，格式: HHmmss
    @JsonProperty("trade_time")
    @JsonFormat(pattern = "HHmmss")
    private LocalDateTime tradeTime;

    //商户附加数据，最多21个汉字字符，原样返回
    private String attach;

    //二维码有效期，单位：秒，必须小于24小时
    @JsonProperty("pay_expire")
    private String payExpire;

    //商户接收支付成功通知消息URL,当notify_flag为1时必输
    @JsonProperty("notify_url")
    private String notifyUrl;

    //商户订单生成的机器IP
    @JsonProperty("tporder_create_ip")
    private String tpOrderCreateIp;

    //扫码后是否需要跳转分行，0：否，1：是；非1按0处理
    @JsonProperty("sp_flag")
    private String spFlag = "0";

    //商户是否开启通知接口 0-否；1-是；非1按0处理
    @JsonProperty("notify_flag")
    private String notifyFlag = "1";

    public static QrReq buildReqBizContent(PayOrder payOrder, ICBC_PayConfig config) {
        QrReq bizContent = new QrReq();
        bizContent.setMerId(config.getMerId());
        bizContent.setOutTradeNo(payOrder.getOrderNo());
        bizContent.setNotifyUrl(config.notifyUrl());
        bizContent.setOrderAmt(String.valueOf(payOrder.getPrice()));
        bizContent.setPayExpire(String.valueOf(payOrder.getExpireSeconds()));
        bizContent.setStoreCode(config.getStoreCode());
        bizContent.setTpOrderCreateIp(payOrder.getOrderCreateIp());
        LocalDateTime now = LocalDateTime.now();
        bizContent.setTradeDate(now);
        bizContent.setTradeTime(now);
        return bizContent;
    }

}
